home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctj0587.arc / PRTPROC.ASM < prev   
Assembly Source File  |  1987-03-16  |  3KB  |  92 lines

  1. ; ROUTINE TO CONVERT 1 WORD TO ASCII DIGITS
  2. ; BY JOHN A. LEFOR
  3.  
  4. ;    AX IS PRINTED
  5.  
  6. PRTDEC     PROC    NEAR
  7.  
  8.            PUSH    DS
  9.            PUSH    DI
  10.            PUSH    DX
  11.            PUSH    CX
  12.            PUSH    AX              ; SAVE REGS
  13.            LEA     DI, CS:TBUFF    ; DI -> PRINT BUFFER
  14.            MOV     DX, AX          ; ARG PASSED IN AX
  15.            MOV     CX, 0           ; TRACK FOR # OF DIGITS
  16. OUT1:
  17.            PUSH    CX
  18.            MOV     AX, DX          ; PLACE NUMBER IN AX
  19.            MOV     DX, 0
  20.            MOV     CX, 10
  21.            DIV     CX              ; DIVIDE BY 10
  22.            XCHG    AX, DX          ; GET REMAINDER IN AX
  23.            ADD     AL, 30H         ; CONVERT TO ASCII
  24.            MOV     CS:[DI], AL     ; PLACE IN CHAR BUFFER
  25.            INC     DI              ; -> NEXT SPOT IN BUFFER
  26.            POP     CX              ; COUNT NUMBER OF DIGITS
  27.            INC     CX
  28.            CMP     DX,0            ; ANYTHING LEFT
  29.            JNZ     OUT1            ; IF MORE, LOOP ON
  30. OUT2:
  31.            DEC     DI              ; DI -> NEXT DIGIT
  32.            MOV     DL, CS:[DI]     ; GET THE DIGIT
  33.            MOV     AH, DISPCHAR
  34.            INT     DOS             ; PRINT THE DIGIT
  35.            LOOP    OUT2            ; LOOP THRU ALL DIGITS
  36.            POP     AX              ; RESTORE REGS
  37.            POP     CX
  38.            POP     DX
  39.            POP     DI
  40.            POP     DS              ;REGS RESTORED
  41.            RET
  42. TBUFF      DB      0,0,0,0,0
  43. PRTDEC  ENDP
  44.         PAGE
  45.  
  46.  
  47. ;       PRTHEX ROUTINE CONVERTS HEX DATA IN AX TO HEX CHARACTERS
  48. ;               RESULT -> BY DS:DI
  49.  
  50. ;       ADAPTED FROM "ADVANCED MS-DOS" BY RAY DUNCAN,
  51. ;       MICROSOFT PRESS, 1986.
  52.  
  53. PRTHEX     PROC    NEAR
  54.            PUSH    DI
  55.            PUSH    AX
  56.            PUSH    CX
  57.            PUSH    AX
  58.            MOV     AL,AH
  59.            CALL    CONV_BYTE       ; CONVERT UPPER BYTE
  60.            POP     AX
  61.            CALL    CONV_BYTE       ; CONVERT LOWER BYTE
  62.            POP     CX
  63.            POP     AX
  64.            POP     DI
  65.            RET
  66. PRTHEX     ENDP
  67.  
  68. CONV_BYTE  PROC    NEAR
  69.            SUB     AH,AH           ; CLEAR UPPER BYTE
  70.            MOV     CL,16
  71.            DIV     CL              ; DIVIDE BINARY DATA BY 16
  72.            CALL    MAKPRT          ; MAKE A PRINTABLE CHAR
  73.            PUSH    ES
  74.            PUSH    DS
  75.            POP     ES
  76.            STOSB
  77.            MOV     AL,AH
  78.            CALL    MAKPRT          ; THE REMAINDER IS NEXT DIGIT
  79.            STOSB
  80.            POP     ES
  81.            RET
  82. CONV_BYTE  ENDP
  83.  
  84. MAKPRT     PROC    NEAR
  85.            ADD     AL,'0'          ; CONVERT BOTTOM 4 BITS IN AL
  86.            CMP     AL,'9'          ; IS IT A CHARACTER
  87.            JLE     ENDPRT
  88.            ADD     AL,'A'-'9'-1    ; FIX THE CHARACTERS
  89. ENDPRT:
  90.            RET
  91. MAKPRT     ENDP
  92.